bash: 複合コマンド
ループ
until
code:sh
until 繰り返し条件; do 処理; done
繰り返し条件コマンドが0を返さない限り処理コマンドを実行する
返り値は最後に実行された処理コマンドの返り値(何も実行されなければ0)
while
code:while.sh
while <test_commands>; do <consequent_commands>; done
繰り返し条件コマンドが0を返す限り処理コマンドを実行する
返り値は最後に実行された処理コマンドの返り値(何も実行されなければ0)
for
code:for.sh
for 繰り返し条件; do 処理; done
「初期値・ループ条件・繰り返し処理」の書き方
code:初期値・ループ条件・繰り返し処理.sh
max=10
for ((i=0; i < $max; i++)); do # カッコが2つ必要(なぜ?)
echo $i
done
inを利用した書き方はいろいろ可能
code:直接指定.sh
for i in 0 1 3 5 8 9; do
echo $i
done
code:範囲で指定.sh
for i in {0..9}; do
echo $i
done
code:コマンドで指定.sh
for i in $(seq 0 9); do
echo $i
done
code:配列で指定.sh
array=(0 1 2 3 4 5 6 7 8 9)
echo $i
done
code:ファイルで指定.sh
for i in $(cat number.txt); do # number.txtには値を改行区切りで羅列
echo $i
done
code:コマンドライン引数で指定.sh
for i in "$@"; do
echo $i
done
break
continue
条件付き処理
if
code:sh
if 条件; then
処理;
[elif 条件; then
処理;]
fi
case
code:sh
case $ANIMAL in
horse | dog | cat) echo -n "four";;
man | kangaroo ) echo -n "two";;
*) echo -n "an unknown number of";;
esac
select
code:sh
select s in Shoyu Shio Mayo; do
echo you picked $s \($REPLY\)
break;
done
# 1) Shoyu
# 2) Shio
# 3) Mayo
# you picked Shoyu (1)
メニューをつくるのに便利
答えが空→もう一度選択肢を提示、選択肢に含まれない答え→sをnullとする
答えの数字はREPLY変数に保存される
(( <expressions> ))
中身を算術的に評価し、0なら返り値1、それ以外なら返り値0を返す
let ...と等価
[[ <expressions> ]]
コマンドのグループ化
( <list> )
;区切りのコマンドのリストに対して、サブシェル環境を作成し、その中で順に実行する 現在のシェルの変数などを変更しない
返り値はコマンドリストの返り値
これは演算子であり、(の後・)の前にスペースは不要
{ <list>; }
;区切りのコマンドのリストに対して、現在のシェル環境で実行する
返り値はコマンドリストの返り値
最後の;は必要
これは予約語であり、{の後・}の前にスペースは必要 出典
bash.icon